package com.zlk.algorithm.huawei.leetcode.heap;

import java.util.HashSet;
import java.util.PriorityQueue;

/**
 * @program: algorithm
 * @ClassName Code41_findKthLargest
 * @description:数组中的第K个最大元素
 * 给定整数数组 nums 和整数 k，请返回数组中第 k 个最大的元素。
 * 请注意，你需要找的是数组排序后的第 k 个最大的元素，而不是第 k 个不同的元素。
 * 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。
 * 示例 1:
 * 输入: [3,2,1,5,6,4], k = 2
 * 输出: 5
 * 示例 2:
 *       1 2 2 3 3 4 5 5 6
 * 输入: [3,2,3,1,2,4,5,5,6], k = 4
 * 输出: 4
 * @author: slfang
 * @create: 2025-01-14 15:15
 * @Version 1.0
 **/
public class Code41_findKthLargest {


    public int findKthLargest(int[] nums, int k) {
        PriorityQueue<Integer> queue = new PriorityQueue<>((x,y)->y-x);
        HashSet<Integer> set = new HashSet<>();
        for (int num : nums) {
            if(!set.contains(num)){
                queue.add(num);
            }
        }
        int ans = -1;
        for (int i = 0; i < k; i++) {
            ans = queue.poll();
        }
        return ans;
    }
}
